
# 异常和错误
"""
1. 代码的运行逻辑
    (1). 解释和编译 ： 会检查代码的语法和结构是否正确 ，若出现这类问题 ，直接报错 ，将不会启动执行(错误)
    (2). 执行 ：按照顺序一行一行的去执行 ，在执行过程中出现了问题，也会报错 。代码也会停止运行 。(异常)

2. 错误 ：在Python中有一些硬性的规定，若没有按照此规定去编写 ，在编辑器中会报红色的波浪线或者标识为error.
    比如 ：不能使用关键字定义变量  ，缩进问题 ，传递数量不一致 。

3. 异常 ： 在执行过程遇到的错误 ，Python会抛出一个异常 ，比如索引越界 ，被零除 ，

4. 异常处理方式：
try:
    可能出错的代码块
except:
    对错误代码进行的处理

其它操作

5. 异常可以分类 ，通过分类 ，可以更准确的知道异常类型 ，提示可以更加准确。

BaseException：所有异常的基类，用于处理所有异常情况。
Exception：常规异常的基类，用于处理大多数异常情况。
TypeError：类型错误，例如对非数字对象进行数学运算。
ValueError：数值错误，例如将一个字符串作为数字进行数学运算。
IndexError：索引错误，例如使用超出序列长度的索引值。
KeyError：字典键错误，例如使用不存在的字典键。
AttributeError：属性错误，例如尝试访问一个对象不存在的属性。
IOError：输入/输出错误，例如读写文件时发生错误。
ValueErrorException：与具体编程相关的错误，例如传递错误的参数类型或参数值。
ZeroDivisionError：除零错误，例如执行除以零的操作。
FileNotFoundError ： 文件不存在错误 ，例如找不到文件
UnicodeDecodeError: 文件编码错误 ，读取编码格式不正确

6. finally : 在运行代码过程中，希望某段代码必须运行，就可以将此段代码放在finally .
    （1）。必须放在except的后面，而except和finally之间不能有其他代码
    (2) . 使用在特定场景下 ，比如关闭资源。
"""



print("hello world")

# def = 123     # 错误

try:
    print(1/0)
    print("============")
except Exception as e:
    print(e)

print("你好")

filename = 'a.txt'

f= None

try:
    # 1. 打开文件
    f = open(filename,encoding='utf-8')

    # 2. 读取文件内容
    contents = f.readlines()
    print("读取文件内容类型:{}".format(type(contents)))
    print(contents)

except FileNotFoundError as e:
    print("文件不存在，请检查源文件")

except UnicodeDecodeError as e:
    print("文件编码错误，请检查文件编码")

except Exception as e:
    print(e)

finally:
    # 3. 关闭文件
    if f:
        f.close()